You should do these problems on paper or mentally first, and only THEN check the solution.
Can you predict what will happen with the following
expressions? Will it disappear forever (the technical term
is that it "diverges") or give an answer? Or both (meaning, give
a part of an answer and then diverge). Think about it,
make a prediction, and then verify with ghci.
NOTE: You can cancel output in ghci by typing control-c. In the worst
case if you are in a Unix system you can suspend the whole process
using control-z and then kill it:
Prelude> nats = map (+1) nats
Prelude> nats
^Z
[1]+ Stopped ghci
HW11 $ kill %1
[1]+ Stopped ghci
Prelude> x = [1..]
--(i)
Prelude> head x
--(ii)
Prelude> tail x
--(iii)
Prelude> head (tail (tail x))
--(iv)
Prelude> zip x (tail x)
--(v)
Prelude> take 5 x
--(vi)
Prelude> elem 100000 x
--(vii)
Prelude> elem (-3) x
--(viii)
Prelude> filter (<5) x
--(ix)
Prelude> takeWhile (<5) x
--(x)
Prelude> zzz = 0 : zzz
Prelude> take 5 zzz
--(xi)
Prelude> rep k = k : (rep k)
Prelude> take 5 (rep k)
--(xii)
Prelude> take 5 (zip x (tail x))
--(xiii)
Prelude> take 10 (x ++ x)
--(xiv)
Prelude> foldr (+) 0 x
--(xv)
Prelude> t = [x*2 | x <- t]
Prelude> take 10 t
--(xvi)
Prelude> t = 1:[x*2 | x <- t]
Prelude> take 10 t
--(xvii)
Prelude> t = ("0":["S("++x++")" | x <- t])
Prelude> take 5 t
--(xviii)
Prelude> f n = 1:[x*n| x <- (f n)]
Prelude> take 5 (f 5)
--(xix1
Prelude> nats = map (+1) nats
Prelude> take 10 nats
--(xx)
Prelude> nats = 1:(map (+1) nats)
Prelude> take 10 nats